﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Linq;
using System.Linq;
using QLTVNEW.Properties;
using System.Windows.Forms;
using DevComponents.DotNetBar;

namespace QLTVNEW
{
    public partial class frmDocGia : DevComponents.DotNetBar.Office2007Form
    {
        public frmDocGia()
        {
            InitializeComponent();
            DataLoadOptions dlo = new DataLoadOptions();
            dlo.LoadWith<DOCGIA>(dg => dg.LOAIDOCGIA);
            dlo.LoadWith<DOCGIA>(dg => dg.PHIEUMUONTRASACHes);
            db.LoadOptions = dlo;
            cls.btnclear = this.btnclear;
            cls.btndel = this.btndel;
            cls.btninsert = this.btninsert;
            cls.btnupdate = this.btnupdate;
            cls.btnsave = this.btnsave;
            cls.group1 = this.groupBox1;
            cls.btnfirst = this.btnfirst;
            cls.btnlast = this.btnlast1;
            cls.btnnext = this.btnnext;
            cls.btnpre = this.btnpre;
            cls.btnsave = this.btnsave;
        }
        clsCall cls = new clsCall();

        #region 'Thành Phần'

        void LoadGridView()
        {
            var query = from tbdg in db.DOCGIAs
                        join tbloai in db.LOAIDOCGIAs on tbdg.MaLoaiDocGia equals tbloai.MaLoaiDocGia
                        select new
                        {
                            tbdg.MaDocGia,
                            tbdg.HoTen,
                            tbdg.NgaySinh,
                            tbdg.DiaChi,
                            tbdg.Email,
                            tbdg.NgayLapThe,
                            tbdg.NgayHetHan,
                            tbloai.TenLoaiDocGia,
                            tbdg.SoSachDangMuon,
                            tbdg.TinhTrangThe
                        };
            GVW.DataSource = query;
        }

        void loadGVDau(int i)
        {
            txtMa.Text = GVW.Rows[i].Cells[0].Value.ToString().Trim();
            txtTen.Text = GVW.Rows[i].Cells[1].Value.ToString().Trim();
            mktNS.Text = GVW.Rows[i].Cells[2].Value.ToString().Trim();
            txtDiaChi.Text = GVW.Rows[i].Cells[3].Value.ToString().Trim();
            txtEmail.Text = GVW.Rows[i].Cells[4].Value.ToString().Trim();
            mktLapThe.Text = GVW.Rows[i].Cells[5].Value.ToString().Trim();
            mktHetHan.Text = GVW.Rows[i].Cells[6].Value.ToString().Trim();
            cbxLoai.Text = GVW.Rows[i].Cells[7].Value.ToString().Trim();
            txtMuon.Text = GVW.Rows[i].Cells[8].Value.ToString().Trim();
            cbxTinhTrang.Text = GVW.Rows[i].Cells[9].Value.ToString().Trim();
        }

        void txtReadOnly(bool a)
        {
            txtMa.ReadOnly = a;
            txtTen.ReadOnly = a;
            txtEmail.ReadOnly = a;
            txtDiaChi.ReadOnly = a;
            mktNS.ReadOnly = a;
        }
        

        void ThemCancel()
        {
            btninsert.Image = Resources.Cancel;
            superTooltip1.SetSuperTooltip(btninsert, new SuperTooltipInfo("Huỷ Bỏ Thao Tác Thêm.", "", "", null, null, eTooltipColor.Lemon, true, true, new System.Drawing.Size(135, 21)));
        }

        void ThemOK()
        {
            btninsert.Image = Resources.add1_;
            superTooltip1.SetSuperTooltip(btninsert, new SuperTooltipInfo("Thêm Độc Giả.", "", "<font color=\"#ED1C24\"><u>Lưu ý:</u></font><br></br>\r\nKhông Cần Nhập Mã Độc Giả.", null, null, DevComponents.DotNetBar.eTooltipColor.Lemon, true, true, new System.Drawing.Size(100, 80)));
        }

        void SuaCancel()
        {
            btnupdate.Image = Resources.Cancel;
            superTooltip1.SetSuperTooltip(btnupdate, new SuperTooltipInfo("Huỷ Bỏ Thao Tác Sửa.", "", "", null, null, eTooltipColor.Lemon, true, true, new System.Drawing.Size(130, 21)));
        }

        void SuaOK()
        {
            btnupdate.Image = Resources.edit;
            superTooltip1.SetSuperTooltip(btnupdate, new SuperTooltipInfo("Sửa Độc Giả.", "", "", null, null, eTooltipColor.Lemon, true, true, new System.Drawing.Size(130, 21)));
        }
        
        #endregion

        QLTVDataContext db = new QLTVDataContext();
        LOAIDOCGIA loai = new LOAIDOCGIA();
        DateTime date = DateTime.Now;
        private void frmDocGia_Load(object sender, EventArgs e)
        {
           
            LoadGridView();
            loai.LoadComboBox(cbxLoai);
            mktLapThe.Text = date.ToString("dd/MM/yyyy");
            mktHetHan.Text = date.AddMonths(6).ToString("dd/MM/yyyy");
            loadGVDau(0);
            txtcount.Text = "Dòng 1";
            cls.MoveDau(false);
        }

        private void btnclear_Click(object sender, EventArgs e)
        {
            cls.Clear(1);
            //foreach (Control ctr in groupBox1.Controls)
            //{
            //    if (ctr is TextBox || ctr is MaskedTextBox)
            //    {
            txtMuon.Text = "0";
            mktLapThe.Text = date.ToString("dd/MM/yyyy");
            mktHetHan.Text = date.AddMonths(6).ToString("dd/MM/yyyy");
            //    }
            //}
           
        }

        private void mktNS_KeyUp(object sender, KeyEventArgs e)
        {
            if (mktNS.MaskFull)
            {
                try
                {
                    DateTime.ParseExact(mktNS.Text, "dd/MM/yyyy", null);
                }
                catch
                {
                    MessageBox.Show("Ngày Không Hợp Lệ","Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                    mktNS.ResetText();
                }
            }

        }

        private void btncancel_Click(object sender, EventArgs e)
        {
            this.AutoValidate = AutoValidate.Disable;
            this.Close();
         
        }

        private void mktLapThe_KeyUp(object sender, KeyEventArgs e)
        {
            if (mktLapThe.MaskFull)
            {
                try
                {
                    DateTime.ParseExact(mktLapThe.Text, "dd/MM/yyyy", null);
                }
                catch
                {
                    MessageBox.Show("Ngày Không Hợp Lệ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    mktLapThe.ResetText();
                }
            } 

        }

        private void mktHetHan_KeyUp(object sender, KeyEventArgs e)
        {
            if (mktHetHan.MaskFull)
            {
                try
                {
                    DateTime.ParseExact(mktHetHan.Text, "dd/MM/yyyy", null);
                }
                catch
                {
                    MessageBox.Show("Ngày Không Hợp Lệ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    mktHetHan.ResetText();
                }
            }
           
        }

        private void btninsert_Click(object sender, EventArgs e)
        {
            if (btnsave.Enabled==false)
            {
                btnclear.PerformClick();
                ThemCancel();
                txtReadOnly(false);
                txtTen.Focus();
                txtMa.ReadOnly = true;
                //btnThem(false);
                cls.btnThem(false);
                labelX1.Visible = false;
                txtMa.Visible = false;
                btnsave.Enabled = true;
                cbxTinhTrang.Text = "Còn Hạn";
            } 
            else
            {
                ThemOK();
                txtReadOnly(true);
                //btnThem(true);
                cls.btnThem(true);
                cls.btnThem(true);
                btnsave.Enabled = false;
                labelX1.Visible = true;
                txtMa.Visible = true;
            }
        }

        DateTime GetNgayThang(string s)
        {
            s = s.Trim();
            string ngay = s.Substring(0, s.IndexOf('/'));
            string thang = s.Substring(s.IndexOf('/') + 1, s.LastIndexOf('/') - ngay.Length - 1);
            string nam = s.Substring(s.LastIndexOf('/') + 1);
            DateTime dt = new DateTime(int.Parse(nam), int.Parse(thang), int.Parse(ngay));
            return dt;
        }

        DateTime now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);

        private void btnupdate_Click(object sender, EventArgs e)
        {
            if (btnsave.Enabled==false)
            {
                txtReadOnly(false);
                txtMa.ReadOnly = true;
                SuaCancel();
                btnsave.Enabled = true;
               // btnSua(false);
                cls.btnSua(false);
                mktLapThe.ReadOnly = false;
                mktHetHan.ReadOnly = false;
                txtMuon.ReadOnly = false;
            } 
            else
            {
                txtReadOnly(true);
                SuaOK();
               // btnSua(true);
                cls.btnSua(true);
                btnsave.Enabled = false;
              
            }
        }

        private void btnsave_Click(object sender, EventArgs e)
        {
           
           if (btnupdate.Enabled==false)
           {
               string err = "";
               string MaLoai = loai.GetMaDocGia(cbxLoai.Text);
               int year = date.Year - GetNgayThang(mktNS.Text).Year;
               if (year>=18)
               {
                   db.uspCRUDDOCGIA('t',0,txtTen.Text,mktNS.Text,txtDiaChi.Text,txtEmail.Text,mktLapThe.Text,mktHetHan.Text,MaLoai,0,cbxTinhTrang.Text,ref err);
                   MessageBox.Show(err.ToString(),"Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                   db.SubmitChanges();
               }
               else
               {
                   MessageBox.Show("Bạn Chưa Đủ 18 Tuổi Để Làm Thẻ Thư Viện.","Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
               }
            //   btnThem(true);
               cls.btnThem(true);
               btnsave.Enabled = false;
               txtReadOnly(true);
               LoadGridView();
               ThemOK();
               labelX1.Visible = true;
               txtMa.Visible = true;
           }
           if (btninsert.Enabled==false)
           {
               if (txtMa.Text!="")
               {
                   DOCGIA dg = db.DOCGIAs.Where(g => g.MaDocGia == int.Parse(txtMa.Text)).SingleOrDefault<DOCGIA>();
                   if (dg!=null)
                   {
                       string err = "";
                       int result = DateTime.Compare(GetNgayThang(mktHetHan.Text), now);
                       int year = date.Year - GetNgayThang(mktNS.Text).Year;
                       if (year>=18)
                       {
                           if (result <= 0)
                           {
                               db.uspCRUDDOCGIA('t', int.Parse(txtMa.Text), txtTen.Text, mktNS.Text, txtDiaChi.Text, txtEmail.Text, mktLapThe.Text, mktHetHan.Text, cbxLoai.SelectedValue.ToString(), int.Parse(txtMuon.Text), "Hết Hạn", ref err);
                               MessageBox.Show(err.ToString(), "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                               db.SubmitChanges();

                           }
                           else
                           {
                               db.uspCRUDDOCGIA('t', int.Parse(txtMa.Text), txtTen.Text, mktNS.Text, txtDiaChi.Text, txtEmail.Text, mktLapThe.Text, mktHetHan.Text, cbxLoai.SelectedValue.ToString(), int.Parse(txtMuon.Text), "Còn Hạn", ref err);
                               MessageBox.Show(err.ToString(), "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                               db.SubmitChanges();
                           }
                       } 
                       else
                       {
                           MessageBox.Show("Có Lỗi Ở Phần Ngày Sinh.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                           mktNS.Focus();
                       }
                       LoadGridView();
                       SuaOK();
                      // btnSua(true);
                       cls.btnSua(true);
                       txtReadOnly(true);
                       btnsave.Enabled = false;                     
                      
                   }
                   else
                       MessageBox.Show("Mã Độc Giả Không Tồn Tại","Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
               }
               else
                   MessageBox.Show("Chưa Nhập Mã Độc Giả","Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
           }
        }

        private void btndel_Click(object sender, EventArgs e)
        {
            if (txtMa.Text!="")
            {
                if (MessageBox.Show("Bạn Có Muốn Xóa Không","Thông Báo",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
                {
                    string MaLoai = loai.GetMaDocGia(cbxLoai.Text);
                    string err = "";
                    db.uspCRUDDOCGIA('x', int.Parse(txtMa.Text), txtTen.Text, mktNS.Text, txtDiaChi.Text, txtEmail.Text, mktLapThe.Text, mktHetHan.Text,MaLoai, int.Parse(txtMuon.Text), cbxTinhTrang.Text, ref err);
                    MessageBox.Show(err.ToString(),"Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                    db.SubmitChanges();
                    LoadGridView();

                }
            }
            else
                MessageBox.Show("Chưa Nhập Mã Độc Giả","Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
        }

        private void txtMuon_KeyUp(object sender, KeyEventArgs e)
        {
           
        }

        private void txtMuon_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "\\d+") && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
                MessageBox.Show("Chỉ Được Nhập Số", "Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
            }
        }
        int dong;
        private void GVW_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                dong = e.RowIndex;
                txtcount.Text = "Dòng " + (dong + 1).ToString();
                cls.MoveDau(true);

                if (dong==0)
                {
                    cls.MoveDau(false);
                    cls.MoveCuoi(true);
                }
                if (dong==GVW.Rows.Count-1)
                {
                    cls.MoveDau(true);
                    cls.MoveCuoi(false);
                }
                txtMa.Text = GVW.Rows[dong].Cells[0].Value.ToString().Trim();
                txtTen.Text = GVW.Rows[dong].Cells[1].Value.ToString().Trim();
                mktNS.Text = GVW.Rows[dong].Cells[2].Value.ToString().Trim();
                txtDiaChi.Text = GVW.Rows[dong].Cells[3].Value.ToString().Trim();
                txtEmail.Text = GVW.Rows[dong].Cells[4].Value.ToString().Trim();
                mktLapThe.Text = GVW.Rows[dong].Cells[5].Value.ToString().Trim();
                mktHetHan.Text = GVW.Rows[dong].Cells[6].Value.ToString().Trim();
                cbxLoai.Text = GVW.Rows[dong].Cells[7].Value.ToString().Trim();
                txtMuon.Text = GVW.Rows[dong].Cells[8].Value.ToString().Trim();
                cbxTinhTrang.Text = GVW.Rows[dong].Cells[9].Value.ToString().Trim();
            }
            catch
            {
                return;
            }
        }

        private void cbxLoai_SelectedIndexChanged(object sender, EventArgs e)
        {
          
        }

        private void buttonX1_Click(object sender, EventArgs e)
        {
            frmInTheDG frm = new frmInTheDG();
            frm.maDG = txtMa.Text;
            frm.tenDG = txtTen.Text;
            frm.ngaySinh = mktNS.Text;
            frm.diaChi = txtDiaChi.Text;
            frm.ngayLap = mktLapThe.Text;
            frm.ngayHH = mktHetHan.Text;
            frm.loaiDG = cbxLoai.Text;
            frm.ShowDialog();
        }

        int row = 0;

        private void btnfirst_Click_1(object sender, EventArgs e)
        {
            GVW.Rows[row].Selected = false;
            row = 0;
            loadGVDau(0);
            txtcount.Text = "Dòng 1";
            cls.MoveDau(false);
            cls.MoveCuoi(true);
          //  GVW.Focus();
           
            GVW.Rows[row].Selected = true;
        }

        private void btnpre_Click_1(object sender, EventArgs e)
        {
            if (row != 0)
            {
                GVW.Rows[row].Selected = false;
                row--;
                loadGVDau(row);
                if (row==0)
                {
                    cls.MoveDau(false);
                }
        
                GVW.Rows[row].Selected = true;
                cls.MoveCuoi(true);
                txtcount.Text = "Dòng " + (row + 1).ToString();
            }
        }

        private void btnnext_Click_1(object sender, EventArgs e)
        {
            if (row < GVW.Rows.Count - 1)
            {
                
                GVW.Rows[row].Selected = false;
                row++;
                loadGVDau(row);
                if (row == GVW.Rows.Count-1)
                {
                    cls.MoveCuoi(false);
                }
                cls.MoveDau(true);
                
                GVW.Rows[row].Selected = true;
                txtcount.Text = "Dòng " + (row + 1).ToString();
            }
        }

        private void btnlast1_Click_1(object sender, EventArgs e)
        {
            GVW.Rows[row].Selected = false;
            row = GVW.Rows.Count - 1;
            loadGVDau(row);
            GVW.Rows[row].Selected = true;
            txtcount.Text = "Dòng " + (row+1).ToString();
            cls.MoveCuoi(false);
            cls.MoveDau(true);
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }
    }
}
